/**
 * 
 */
package fr.toussna.service;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

import fr.toussna.entity.Category;
import fr.toussna.entity.Member;
import fr.toussna.exception.ElementNotExistException;

/**
 * Cette interface regroupe les services exposes par l'application pour
 * manipuler les articles et les commentaires.
 * <p>
 * Elle sert comme une façade pour regrouper toutes les méthodes de service; On
 * pourra aussi ultérieurement exposer ces méthodes en web services.<br/>
 * Spring injectera les dépendances pour les DAOs.
 * </p>
 * 
 * @author My
 * @version 2.0
 * 
 */
@WebService
public interface AccountService {

	/**
	 * Cette méthode permet d'authentifier un client web et vérifier s'il a bien
	 * un compte valide. Elle est utilisé pour la session membre.
	 * 
	 * @param member
	 *            Le client a authentifié.
	 * @return True s'il a un compte, False sinon.
	 */
	public Boolean IdentifyWebClient(Member member);

	/**
	 * Cette méthode crée une catégorie dans le système
	 * 
	 * @param category
	 *            catégorie a créer
	 * @return catégorie avec un identifiant
	 */
	@WebMethod
	public Category createCategory(@WebParam(name = "category") Category category);

	/**
	 * Cette méthode renvoi une catégorie avec toutes ses propriétés.
	 * 
	 * @param id
	 *            identifiant a rechercher
	 * @return la catégorie
	 */
	public Category findCategory(long id) throws ElementNotExistException;

	/**
	 * Renvoi toutes les catégories du système
	 * 
	 * @return La liste des catégories.
	 */
	@WebMethod
	public List<Category> findAllCategories();

	/**
	 * Supprime une catégorie du système
	 * 
	 * @param category
	 */
	@WebMethod
	public void deleteCategory(@WebParam(name = "category") Category category);

	/**
	 * Rajoute un membre dans le système
	 * 
	 * @param member
	 *            Le membre a rajouté
	 * @return Le membre avec son id dans le système
	 */
	public Member createMember(Member member);

	/**
	 * Supprime un membre du système
	 * 
	 * @param member
	 *            Le membre a supprimé
	 */
	public void deleteMember(Member member);

	/**
	 * Met a jour un membre
	 * 
	 * @param member
	 *            Le membre a mettre a jour
	 */
	public void updateMember(Member member);

	/**
	 * Renvoi un membre a partir d'un identifiant
	 * 
	 * @param id
	 *            identifiant du membre rechercher
	 * @return Le membre
	 */
	public Member findMember(long id) throws ElementNotExistException;

	/**
	 * Renvoi un membre à partir d'un mot clé
	 * 
	 * @param name
	 *            Le mot clé a rechercher
	 * @return La liste des membres contenant ce mot clé.
	 */
	public List<Member> findMemberByName(String name);

}
